package com.touzhijia.authority.security;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 作者： lzw<br/>
 * 创建时间：2018-03-15 14:31 <br/>
 */
@ConfigurationProperties(prefix = "security.custom")
@Component
@Data
public class SecurityConfig {

    /**
     * 权限系统模块名
     */
    private String moduleName;

    /**
     * 默认情况下是否需要控制Web资源权限(true 需要；false 不要)
     */
    private Boolean defaultNeedAuthorization = false;

    /**
     * 用户登录相关配置
     */
    private final Login login = new Login();

    /**
     * 用户登出相关配置
     */
    private final Logout logout = new Logout();

    @Data
    public static class Login {

        /**
         * 登录页面
         */
        private String loginPage = "/index.html";

        /**
         * 登录请求URL
         */
        private String loginUrl = "/login";

        /**
         * Json 数据提交方式
         */
        private Boolean jsonDataSubmit = true;

        /**
         * 登录用户名参数名
         */
        private String usernameParameter = "username";

        /**
         * 登录密码参数名
         */
        private String passwordParameter = "password";

        /**
         * 登录验证码参数名
         */
        private String captchaParameter = "captcha";

        /**
         * 登录只支持POST请求
         */
        private Boolean postOnly = true;

        /**
         * 隐藏登录用户找不到的异常
         */
        private Boolean hideUserNotFoundExceptions = true;

        /**
         * 登录成功 - 是否需要跳转
         */
        private Boolean loginSuccessNeedRedirect = false;

        /**
         * 登录成功 - 总是需要跳转
         */
        private Boolean loginSuccessAlwaysRedirect = false;

        /**
         * 登录成功 - 总是需要跳转到loginSuccessRedirectPage指定的页面
         */
        private Boolean loginSuccessAlwaysRedirectThePage = false;

        /**
         * 登录成功默认跳转的页面(不一定会跳转)
         */
        private String loginSuccessRedirectPage = "/home.html";

        /**
         * 登录失败 - 是否需要跳转(重定向)
         */
        private Boolean loginFailureNeedRedirect = false;

        /**
         * 登录失败 - 是否需要跳转(请求转发) 优先级低于loginFailureNeedRedirect
         */
        private Boolean loginFailureNeedForward = false;

        /**
         * 登录失败默认跳转的页面(一定会跳转)
         */
        private String loginFailureRedirectPage = "/index.html";

        /**
         * 无权访问时是否需要跳转
         */
        private Boolean forbiddenNeedForward = true;

        /**
         * 无权访问时跳转页面(请求转发)
         */
        private String forbiddenForwardPage = "/403.html";
    }

    @Data
    public static class Logout {

        /**
         * 登出请求URL
         */
        private String logoutUrl = "/logout";

        /**
         * 登出成功 - 是否需要跳转
         */
        private Boolean logoutSuccessNeedRedirect = false;

        /**
         * 登出成功默认跳转的页面(一定会跳转)
         */
        private String logoutSuccessRedirectPage = "/home.html";

    }
}
